home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / GRAHAM / XA_6S.ZIP / SOURCE / GRAF_MOU.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-15  |  7.5 KB  |  300 lines

  1. /*
  2.  * XaAES - XaAES Ain't the AES
  3.  *
  4.  * A multitasking AES replacement for MiNT
  5.  *
  6.  */
  7.  
  8. #include <VDI.H>
  9. #include "XA_DEFS.H"
  10. #include "XA_TYPES.H"
  11. #include "K_DEFS.H"
  12. #include "XA_GLOBL.H"
  13. #include "GRAF_MOU.H"
  14.  
  15. /* Mouse definition block - standard GEM arrow */
  16.  
  17. MFORM M_ARROW_MOUSE =
  18. {    0x0000,0x0000,0x0001,0x0000,0x0001,
  19. /* Mask data */
  20.     0xC000,0xE000,0xF000,0xF800,
  21.     0xFC00,0xFE00,0xFF00,0xFF80,
  22.     0xFFC0,0xFFE0,0xFE00,0xEF00,
  23.     0xCF00,0x8780,0x0780,0x0380,
  24. /* Cursor data */
  25.     0x0000,0x4000,0x6000,0x7000,
  26.     0x7800,0x7C00,0x7E00,0x7F00,
  27.     0x7F80,0x7C00,0x6C00,0x4600,
  28.     0x0600,0x0300,0x0300,0x0000
  29. };
  30.  
  31. /* Mouse definition block - standard GEM busy bee*/
  32.  
  33. MFORM M_BEE_MOUSE =
  34. {    0x0008,0x0008,0x0001,0x0000,0x0001,
  35. /* Mask data */
  36.     0x1C7E,0x1CFF,0x1CFF,0xEFFF,
  37.     0xFFFF,0xFFFF,0x3FFE,0x3FFC,
  38.     0x7FFE,0xFFFE,0xFFFF,0xFFFF,
  39.     0xFFFF,0xFFFF,0xFEFF,0x7C3E,
  40. /* Cursor data */
  41.     0x0800,0x083C,0x0062,0x06C2,
  42.     0xC684,0x198A,0x1B54,0x06E0,
  43.     0x1D58,0x33FC,0x6160,0x42DE,
  44.     0x44D8,0x4A56,0x3414,0x0000
  45. };
  46.  
  47. /* Mouse definition block standard GEM open hand */
  48.  
  49. MFORM M_HAND_MOUSE =
  50. {    0x0008,0x0008,0x0001,0x0000,0x0001,
  51. /* Mask data */
  52.     0x0300,0x1FB0,0x3FF8,0x3FFC,
  53.     0x7FFE,0xFFFE,0xFFFE,0x7FFF,
  54.     0x7FFF,0xFFFF,0xFFFF,0x7FFF,
  55.     0x3FFF,0x0FFF,0x01FF,0x003F,
  56. /* Cursor data */
  57.     0x0300,0x1CB0,0x2448,0x2224,
  58.     0x7112,0x9882,0x8402,0x4201,
  59.     0x7001,0x9801,0x8401,0x4000,
  60.     0x3000,0x0E00,0x01C0,0x0030
  61. };
  62.  
  63. /* Mouse definition block - standard GEM outlined cross*/
  64.  
  65. MFORM M_OCRS_MOUSE =
  66. {    0x0007,0x0007,0x0001,0x0000,0x0001,
  67. /* Mask data */
  68.     0x07C0,0x07C0,0x06C0,0x06C0,
  69.     0x06C0,0xFEFE,0xFEFE,0xC006,
  70.     0xFEFE,0xFEFE,0x06C0,0x06C0,
  71.     0x06C0,0x07C0,0x07C0,0x0000,
  72. /* Cursor data */
  73.     0x0000,0x0380,0x0280,0x0280,
  74.     0x0280,0x0280,0x7EFC,0x4004,
  75.     0x7EFC,0x0280,0x0280,0x0280,
  76.     0x0280,0x0380,0x0000,0x0000
  77. };
  78.  
  79. /* Mouse definition block - standard GEM pointing finger */
  80.  
  81. MFORM M_POINT_MOUSE =
  82. {    0x0000,0x0000,0x0001,0x0000,0x0001,
  83. /* Mask data */
  84.     0x3000,0x7C00,0x7E00,0x1F80,
  85.     0x0FC0,0x3FF8,0x3FFC,0x7FFC,
  86.     0xFFFE,0xFFFE,0x7FFF,0x3FFF,
  87.     0x1FFF,0x0FFF,0x03FF,0x00FF,
  88. /* Cursor data */
  89.     0x3000,0x4C00,0x6200,0x1980,
  90.     0x0C40,0x32F8,0x2904,0x6624,
  91.     0x93C2,0xCF42,0x7C43,0x2021,
  92.     0x1001,0x0C41,0x0380,0x00C0
  93. };
  94.  
  95. /* Mouse definition block - standard GEM thin cross */
  96.  
  97. MFORM M_TCRS_MOUSE =
  98. {    0x0007,0x0007,0x0001,0x0000,0x0001,
  99. /* Mask data */
  100.     0x0380,0x0380,0x0380,0x0380,
  101.     0x0280,0x0280,0xFEFE,0xF01E,
  102.     0xFEFE,0x0280,0x0280,0x0380,
  103.     0x0380,0x0380,0x0380,0x0000,
  104. /* Cursor data */
  105.     0x0000,0x0100,0x0100,0x0100,
  106.     0x0100,0x0100,0x0100,0x7FFC,
  107.     0x0100,0x0100,0x0100,0x0100,
  108.     0x0100,0x0100,0x0000,0x0000
  109. };
  110.  
  111. /* Mouse definition block - standard GEM thick cross */
  112.  
  113. MFORM M_THKCRS_MOUSE =
  114. {    0x0007,0x0007,0x0001,0x0000,0x0001,
  115. /* Mask data */
  116.     0x07C0,0x07C0,0x07C0,0x07C0,
  117.     0x07C0,0xFFFE,0xFFFE,0xFFFE,
  118.     0xFFFE,0xFFFE,0x07C0,0x07C0,
  119.     0x07C0,0x07C0,0x07C0,0x0000,
  120. /* Cursor data */
  121.     0x0000,0x0380,0x0380,0x0380,
  122.     0x0380,0x0380,0x7FFC,0x7FFC,
  123.     0x7FFC,0x0380,0x0380,0x0380,
  124.     0x0380,0x0380,0x0000,0x0000
  125. };
  126.  
  127. /* Mouse definition block - standard GEM text cursor*/
  128.  
  129. MFORM M_TXT_MOUSE =
  130. {    0x0007,0x0007,0x0001,0x0000,0x0001,
  131. /* Mask data */
  132.     0x7E7E,0x7FFE,0x07E0,0x03C0,
  133.     0x03C0,0x03C0,0x03C0,0x03C0,
  134.     0x03C0,0x03C0,0x03C0,0x03C0,
  135.     0x03C0,0x07E0,0x7FFE,0x7E7E,
  136. /* Cursor data */
  137.     0x3C3C,0x0660,0x03C0,0x0180,
  138.     0x0180,0x0180,0x0180,0x0180,
  139.     0x0180,0x0180,0x0180,0x0180,
  140.     0x0180,0x03C0,0x0660,0x3C3C
  141. };
  142.  
  143. /* Mouse definition block - XaAES Data Uncertain logo cursor */
  144.  
  145. MFORM M_BUBD_MOUSE =
  146. {    0x0007,0x0008,0x0002,0x0000,0x0001,
  147. /* Mask data */
  148.     0x07C0,0x1FF0,0x3FF8,0x7FFC,
  149.     0x7FFC,0xFFFE,0xFFFE,0xFFFE,
  150.     0xFFFE,0xFFFE,0x7FFC,0x7FFC,
  151.     0x3FF8,0x1FF0,0x07C0,0x0000,
  152. /* Cursor data */
  153.     0x07C0,0x1930,0x2AA8,0x5094,
  154.     0x7114,0x9012,0x9112,0x9FF2,
  155.     0x8002,0x8FE2,0x4A24,0x4B24,
  156.     0x2B28,0x1A30,0x07C0,0x0000
  157. };
  158.  
  159. /* Mouse definition block - XaAES re-sizer cursor */
  160.  
  161. MFORM M_SIZER_MOUSE =
  162. {    0x0007,0x0008,0x0002,0x0000,0x0001,
  163. /* Mask data */
  164.     0x0000,0xFE00,0x8100,0x8E00,
  165.     0x8400,0xA200,0xB100,0xA888,
  166.     0x4454,0x0234,0x0114,0x0084,
  167.     0x01C4,0x0204,0x01FC,0x0000,
  168. /* Cursor data */
  169.     0x0000,0x0000,0x7E00,0x7000,
  170.     0x7800,0x5C00,0x4E00,0x4700,
  171.     0x0388,0x01C8,0x00E8,0x0078,
  172.     0x0038,0x01F8,0x0000,0x0000
  173. };
  174.  
  175. /* Mouse definition block - XaAES mover cursor */
  176.  
  177. MFORM M_MOVER_MOUSE =
  178. {    0x0008,0x0007,0x0001,0x0000,0x0001,
  179. /* Mask data */
  180.     0x0000,0x0080,0x01C0,0x0080,
  181.     0x0080,0x0080,0x1084,0x3FFE,
  182.     0x1084,0x0080,0x0080,0x0080,
  183.     0x01C0,0x0080,0x0000,0x0000,
  184. /* Cursor data */
  185.     0x0080,0x0140,0x0220,0x0140,
  186.     0x0140,0x1144,0x2F7A,0x4001,
  187.     0x2F7A,0x1144,0x0140,0x0140,
  188.     0x0220,0x0140,0x0080,0x0000
  189. };
  190.  
  191. /*
  192.     AES graf_mouse() routines
  193.     Small extension to give a couple of extra cursor shapes
  194.     (Data Uncertain logo, mover & resizer)
  195. */
  196.  
  197. void graf_mouse(short m_shape, MFORM *mf)
  198. {
  199.     switch(m_shape)
  200.     {
  201.         case M_ON:
  202.             v_show_c(V_handle, 1);
  203.             return;
  204.         case M_OFF:
  205.             v_hide_c(V_handle);
  206.             return;
  207.         case ARROW:
  208.             vsc_form(V_handle, &M_ARROW_MOUSE);
  209.             break;
  210.         case TEXT_CRSR:
  211.             vsc_form(V_handle, &M_TXT_MOUSE);
  212.             break;
  213.         case HOURGLASS:
  214.             vsc_form(V_handle, &M_BEE_MOUSE);
  215.             break;
  216.         case POINT_HAND:
  217.             vsc_form(V_handle, &M_POINT_MOUSE);
  218.             break;
  219.         case FLAT_HAND:
  220.             vsc_form(V_handle, &M_HAND_MOUSE);
  221.             break;
  222.         case THIN_CROSS:
  223.             vsc_form(V_handle, &M_TCRS_MOUSE);
  224.             break;
  225.         case THICK_CROSS:
  226.             vsc_form(V_handle, &M_THKCRS_MOUSE);
  227.             break;
  228.         case OUTLN_CROSS:
  229.             vsc_form(V_handle, &M_OCRS_MOUSE);
  230.             break;
  231.         case USER_DEF:
  232.             vsc_form(V_handle, mf);
  233.             break;
  234.         case XACRS_BUBBLE_DISC:        /* The Data Uncertain logo */
  235.             vsc_form(V_handle, &M_BUBD_MOUSE);
  236.             break;
  237.         case XACRS_RESIZER:            /* The 'resize window' cursor */
  238.             vsc_form(V_handle, &M_SIZER_MOUSE);
  239.             break;
  240.         case XACRS_MOVER:            /* The 'move window' cursor */
  241.             vsc_form(V_handle, &M_MOVER_MOUSE);
  242.             break;
  243.     }
  244.     v_hide_c(V_handle);                /* Hide/reveal cursor to update on screen image immediately */
  245.     v_show_c(V_handle,1);
  246. }
  247.  
  248. /* Slight differance from GEM here - each application can have a different mouse form, */
  249. /* and the one that is used is for the client with the top window. */
  250. /* A non-top application can still hide & show the mouse though, to ensure that redraws */
  251. /* are done correctly */
  252. unsigned long XA_graf_mouse(short clnt_pid, AESPB *pb)
  253. {
  254.     short m=pb->intin[0];
  255.  
  256. /* Store the mouse shape requested if this isn't a turn on/off request. */
  257.     if ((m!=M_OFF)&&(m!=M_ON))
  258.     {
  259.         clients[clnt_pid].client_mouse=m;
  260.         clients[clnt_pid].client_mouse_form=(MFORM*)(pb->addrin[0]);    
  261. /* Only actually set the cursor shape if the top window is our client's  */
  262. /* or there are no windows open at all */
  263.         if ((window_list==root_window)||(window_list->owner==clnt_pid))
  264.             graf_mouse(m, (MFORM*)(pb->addrin[0]));
  265.     }else{
  266.         graf_mouse(m, NULL);    /* Any client can hide the mouse (required for redraws by clients */
  267.                                 /* that aren't top) */
  268.     }
  269.  
  270. /* Always return no error */
  271.     pb->intout[0]=1;
  272.  
  273.     return XAC_DONE;
  274. }
  275.  
  276. unsigned long XA_graf_handle(short clnt_pid, AESPB *pb)
  277. {
  278.     pb->intout[0]=P_handle;        /* graf_handle returns the physical workstation handle */
  279.     pb->intout[1]=display.c_max_w;
  280.     pb->intout[2]=display.c_max_h;
  281.     pb->intout[3]=display.c_max_w+2;
  282.     pb->intout[4]=display.c_max_h+2;
  283.     
  284.     return XAC_DONE;
  285. }
  286.  
  287. unsigned long XA_graf_mkstate(short clnt_pid, AESPB *pb)
  288. {
  289.     short x,y,mb,k;
  290.     
  291.     vq_mouse(V_handle, &mb, &x, &y);
  292.     vq_key_s(V_handle, &k);
  293.     pb->intout[0]=1;
  294.     pb->intout[1]=x;
  295.     pb->intout[2]=y;
  296.     pb->intout[3]=mb;
  297.     pb->intout[4]=k;
  298.     return TRUE;
  299. }
  300.